package main

//
//import (
//	"bytes"
//	"container/list"
//	"encoding/json"
//	"io"
//	"log"
//)
//
//const (
//	QCC_ID_NAME    = "qcc_id"
//	QCC_PID_NAME   = "qcc_pid"
//	QCC_TABLE_NAME = "$table"
//	QCC_PARSE_FLAG = "Format"
//)
//
////type QccFormatter struct {
////	objectId *ObjectId
////}
//
//func NewQccFormatter() *QccFormatter {
//	formatter := &QccFormatter{
//		objectId: NewObjectId(),
//	}
//	return formatter
//}
//
//func (this *QccFormatter) Format(bs []byte) io.Reader {
//	buf := new(bytes.Buffer)
//	var object map[string]interface{}
//	err := json.Unmarshal(bs, &object)
//	if err != nil || object == nil {
//		log.Println(err)
//		this.writeErrorJson(buf, nil)
//		goto end
//	}
//	if object["Status"] != 200 && object["Status"] != "200" {
//		this.writeErrorJson(buf, object)
//		goto end
//	}
//
//	if result, ok := object["Result"]; ok {
//		//jsonobject
//		switch result.(type) {
//		case map[string]interface{}:
//			object["Result"] = ListToArray(this.parseObject(result.(map[string]interface{}), nil, "main"))
//			this.writeJson(buf, object)
//
//		case []interface{}:
//			object["Result"] = ListToArray(this.parseArray(result.([]interface{}), nil, "main"))
//			this.writeJson(buf, object)
//		}
//	}
//
//end:
//	return buf
//}
//
////func (this *QccFormatter) formatSingle(object map[string]interface{}, buffer *bytes.Buffer) *list.List {
////}
//
//func (this *QccFormatter) parseObject(object map[string]interface{}, pid *string, table string) *list.List {
//	li := list.New()
//	//生成主键
//	id := this.objectId.Generate()
//	item := make(map[string]interface{})
//	item[QCC_TABLE_NAME] = table
//	item[QCC_ID_NAME] = id
//	fieldCount := 0
//	for k, v := range object {
//		kk := snakeString(k)
//		switch v.(type) {
//
//		case map[string]interface{}:
//			_li := this.parseObject(v.(map[string]interface{}), &id, kk)
//			for e := _li.Front(); e != nil; e = e.Next() {
//				li.PushBack(e.Value)
//			}
//
//		case []interface{}:
//			_li := this.parseArray(v.([]interface{}), &id, kk)
//			for e := _li.Front(); e != nil; e = e.Next() {
//				li.PushBack(e.Value)
//			}
//
//		default:
//			item[kk] = v
//			fieldCount++
//		}
//
//	}
//
//	if pid != nil {
//		item[QCC_PID_NAME] = *pid
//	}
//	if fieldCount > 0 {
//		li.PushBack(item)
//	}
//	return li
//}
//
//func (this *QccFormatter) parseArray(array []interface{}, pid *string, table string) *list.List {
//	li := list.New()
//	for i := range array {
//		object, ok := array[i].(map[string]interface{})
//		if !ok {
//			continue
//		}
//		_li := this.parseObject(object, pid, table)
//		for e := _li.Front(); e != nil; e = e.Next() {
//			li.PushBack(e.Value)
//		}
//	}
//
//	return li
//}
//
//func (this *QccFormatter) writeErrorJson(buf *bytes.Buffer, object map[string]interface{}) {
//	if object == nil {
//		object = make(map[string]interface{})
//	}
//	object[QCC_PARSE_FLAG] = false
//	this.writeJson(buf, object)
//}
//
//func (this *QccFormatter) writeJson(buf *bytes.Buffer, object interface{}) {
//	if v, ok := object.(map[string]interface{}); ok {
//		if _, ok := v[QCC_PARSE_FLAG]; !ok {
//			v[QCC_PARSE_FLAG] = true
//		}
//	}
//
//	if bs, err := json.Marshal(object); err == nil {
//		buf.Write(bs)
//	} else {
//		this.writeErrorJson(buf, nil)
//	}
//}
//
//func init() {
//
//	go func() {
//		select {
//		case <-GlobalProxyInited:
//			GlobalProxy.RegisterFormatter("qcc", NewQccFormatter())
//		}
//	}()
//}
